home *** CD-ROM | disk | FTP | other *** search
/ PC Gamer (Italian) 36 / PC Gamer IT CD 36 2-2.iso / SINDEMO / sindemo2.exe / data / base / pak0.pak / maps / intro.scr < prev    next >
Text File  |  1998-09-22  |  49KB  |  1,707 lines

  1. //==========================================
  2. // Intro Map Script
  3. // Tom Mustaine - Ritual Entertainment
  4. //==========================================
  5. // This map is not deathmatchable
  6. //parm.deathmatch getcvar deathmatch
  7. //parm.deathmatch ifnotequal 0 goto maps/intro_dm.scr::start
  8. //parm.deathmatch ifnotequal 0 goto end_singleplayer_script
  9. //goto single_player_script_start
  10. //end
  11.  
  12. //end_singleplayer_script:
  13. //end
  14.  
  15. //==========================================
  16. // Intro Dialog
  17. single_player_script_start:
  18.  
  19.     setdialogscript dialog/dialog_intro.scr
  20.  
  21. //
  22. //==========================================
  23.  
  24. //==========================================
  25. // Jump to Intro Cinematic
  26. //==========================================
  27.  
  28.     $skip_trigger hide
  29.     thread banktimecon
  30.     goto cinematic
  31.      end
  32.  
  33. //------------------------------------------
  34. //******************************************
  35. //==========================================
  36. // Main thread and Script init
  37. //==========================================
  38. //******************************************
  39. //------------------------------------------
  40. mainthread:
  41.     thread helicopter_damage_thread        // Heli Damage sound thread
  42.     thread rotors_spin_down_thread        // Rotor spindown for end
  43.     thread billboard_thread            // Billboard setup and wait
  44.     thread ammo1_thread            // Ammobox1 wait
  45.     thread ammo2_thread            // Ammobox2 wait
  46.     thread bank_entrance_thread        // Awning collapse and wait thread
  47.     thread t1000_secret            // Easter egg
  48.  
  49. // Initial Level variable setup
  50.  
  51.     level.count_bad_guys = 0
  52.     level.count_good_guys = 0
  53.     level.PObjective1 = 0
  54.     level.PObjective2 = 0
  55.     level.PObjective3 = 0
  56.     level.SObjective1 = 0
  57.     level.tree_death_toll = 0
  58.     game.intro_start = 1
  59.     $door1    notsolid            // Fix guys getting caught on doors
  60.     $door2    notsolid            // Fix guys getting caught on doors
  61.     $door3    notsolid            // Fix guys getting caught on doors
  62.  
  63.     thread turret_death_wait        // Turret death counter
  64.     thread turret1_deathreport        // Object waiting for turret death
  65.     thread turret2_deathreport        // Object waiting for turret death
  66.     thread turret3_deathreport        // Object waiting for turret death
  67.     thread MissionComputer            // Mission Computer
  68.     thread SkillLevelSettings        // Skill level settings
  69.     thread pillar                // Awning trigger thread
  70.     thread heli_damage_dialog        // Helicopter damage dialog thread
  71.     thread random_sounds            // Random sounds near player head
  72.                                                                                                                                                                                                                                                                                                                                                                                                                                                    thread shootsign            // Smart ass remark sign
  73.      end
  74. //==========================================
  75. //------------------------------------------
  76. //==========================================
  77.  
  78.  
  79. //------------------------------------------
  80. //******************************************
  81. //==========================================
  82. // All cinematic stuff
  83. //==========================================
  84. //******************************************
  85. //------------------------------------------
  86. cinematic:
  87.  
  88.     cinematic            // start up as a cinematic
  89.     skipthread skip_sequence    // setup our skip thread
  90.     waitforplayer            // wait till the player is spawned
  91.     freezeplayer            // freeze the player
  92.     fadeout 0.5 0 0 0        // fade out
  93.  
  94.     thread initialize_thread    // Setup level and actors
  95.     local.waitforthread = parm.previousthread
  96.     waitForThread local.waitforthread
  97.  
  98.     thread PoliceCar1_Movie            // Start Car1
  99.     thread PoliceCar2_Movie            // Start Car2
  100.  
  101.     thread camera_thread            // Start Camera
  102.     level.camerathread = parm.previousthread
  103.     thread pigeon_thread            // Start Pigeon
  104.     level.pigeonthread = parm.previousthread
  105.     $roofblade thread ignore_thread        // Actors ignore everything
  106.     $groundblade thread ignore_thread    // Actors ignore everything
  107.     $cinematic_thug1 thread ignore_thread    // Actors ignore everything
  108.     $cinematic_thug2 thread ignore_thread    // Actors ignore everything
  109.      end
  110.  
  111. //==========================================
  112. // Main Cinematic Skip Sequence
  113. //==========================================
  114. skip_sequence:
  115.     fadeout 0.1 0 0 0
  116.     noncinematic            // no longer a cinematic
  117.     wait 0.1            // wait for fade out
  118.     cueplayer            // go back to the player
  119.  
  120.     level.camera2started ifequal 1 terminate level.camera2thread    // kill any threads we have going
  121.     terminate level.camerathread
  122.     terminate level.pigeonthread
  123.  
  124.     $pigeon remove            // remove that darn pigeon
  125.  
  126.     thread helicopter_setup_thread    // setup helicopter
  127.     local.WaitingForThread = parm.previousthread
  128.     waitForThread local.WaitingForThread
  129.     //waitForThread parm.previousthread
  130.  
  131.     $helicopter jumpto $hover_path
  132.     thread mainthread        // Skip to action!
  133.     local.WaitingForThread = parm.previousthread
  134.     waitForThread local.WaitingForThread
  135.     thread start_action_thread
  136.      end
  137.  
  138. //==========================================
  139. // Cinematic/Level Initilize thread
  140. //==========================================
  141. initialize_thread:
  142.     hud 0                // Kill hud for Cinematic
  143.     music none            // No music
  144.     $sun1 remove
  145.     freezeplayer
  146.     $camera2 moveto $cam2start
  147.     $node hide
  148.     $node notsolid
  149.     $lookatme hide
  150.     $lookatme notsolid
  151.     $roofblade hide
  152.     $groundblade hide
  153.     $groundblade notsolid
  154.     $roofblade notsolid
  155.     $node time .1
  156.     $node rotateYup 180
  157.     waitFor $node
  158.     music aux5 none
  159.     $cinematic_thug1 anim talk1
  160.     $cinematic_thug2 anim talk1
  161.      end
  162.  
  163. //==========================================
  164. // Police Car #1 go
  165. //==========================================
  166. PoliceCar1_Movie:
  167.     local.Movie = 1
  168.     local.WaitTime = 0
  169.     $policecar1_movie jumpto $police1_movie_start
  170.     $policetruck1_movie jumpto $police1_movie_start
  171.     $policetruck1_movie hide
  172.     local.VehicleName string "$policecar1_movie"
  173.     $policecar1_siren_movie bind local.VehicleName
  174.     wait 0.1
  175.      goto PoliceCar1_Movie_Loop
  176.  
  177. PoliceCar1_Movie_Loop:
  178.     local.VehicleName show
  179.     $policecar1_siren_movie playsound "environment/alarm/police/siren2.wav" 4
  180.     local.VehicleName followpath $police1_movie_start normalangles
  181.     waitFor local.VehicleName
  182.     wait local.WaitTime
  183.     $policecar1_siren_movie stopsound
  184.  
  185. level.piller ifequal 2 goto movieend1
  186.  
  187.     $police1_movie_launcher launch rocket
  188.     wait 0.3
  189.     parm.VehicleName string local.VehicleName
  190.     thread Police1_Movie_CarExplode
  191.     local.waitforthread = parm.previousthread
  192.     waitForThread parm.previousthread
  193.     local.VehicleName jumpto $police1_movie_start
  194.     local.Vehicle randomint 100
  195.     local.Vehicle ifgreater 50 local.VehicleName string "$policetruck1_movie"
  196.     local.Vehicle iflessequal 50 local.VehicleName string "$policecar1_movie"
  197.     $policecar1_siren_movie bind local.VehicleName
  198.     local.WaitTime randomint 10
  199.     local.WaitTime += 1
  200.     wait local.WaitTime
  201.     local.Movie ifequal 1 wait 15
  202.     local.Movie = 0
  203.       goto PoliceCar1_Movie_Loop
  204.      end
  205.  
  206. movieend1:        // Stop Car from moving
  207. end
  208.  
  209. //==========================================
  210. // Police Car #1 explode
  211. //==========================================
  212. Police1_Movie_CarExplode:
  213.     local.VehicleName string parm.VehicleName
  214.     local.VehicleName time 0.6
  215.     local.VehicleName moveUp    128
  216.     local.VehicleName moveWest  24
  217.     local.VehicleName rotateXup  -60
  218.     trigger $police1_movie_boom
  219.     //local.VehicleName shatter "1 1 1" 20 10 40 .05 0
  220.     $policecar1_siren_movie playsound "environment/alarm/police/siren2down.wav" 3
  221.       waitFor local.VehicleName
  222.  
  223.     local.VehicleName time 0.3
  224.     local.VehicleName moveUp    64
  225.     local.VehicleName moveWest   12
  226.     local.VehicleName rotateXup  -30
  227.       waitFor local.VehicleName
  228.  
  229.     local.VehicleName time 0.9
  230.     local.VehicleName moveDown  128
  231.     local.VehicleName moveWest    36
  232.     local.VehicleName rotateXup  -90
  233.     trigger $police1_movie_boom
  234.     local.VehicleName shatter "1 1 1" 40 20 40 .05 0
  235.       waitFor local.VehicleName
  236.  
  237.     local.VehicleName hide
  238.     local.VehicleName time 0.1
  239.     local.VehicleName rotateXup  180
  240.     trigger $police1_movie_boom
  241.       waitFor local.VehicleName
  242.      end
  243.  
  244. //==========================================
  245. // Police Car #2 go
  246. //==========================================
  247. PoliceCar2_Movie:
  248.     local.Movie = 1
  249.     local.WaitTime = 4
  250.     $policecar2_movie jumpto $police2_movie_start
  251.     $policetruck2_movie jumpto $police2_movie_start
  252.     $policetruck2_movie hide
  253.     local.VehicleName string "$policecar2_movie"
  254.     $policecar2_siren_movie bind local.VehicleName
  255.     wait 4
  256.       goto PoliceCar2_Movie_Loop
  257.  
  258. PoliceCar2_Movie_Loop:
  259.     local.VehicleName show
  260.     $policecar2_siren_movie playsound "environment/alarm/police/siren2.wav" 4
  261.     local.VehicleName followpath $police2_movie_start normalangles
  262.     waitFor local.VehicleName
  263.     wait local.WaitTime
  264.     $policecar2_siren_movie stopsound
  265.  
  266.     level.piller ifequal 2 goto movieend2
  267.  
  268.     $police2_movie_launcher launch rocket
  269.     wait 0.3
  270.     parm.VehicleName string local.VehicleName
  271.     thread Police2_Movie_CarExplode
  272.     local.waitforthread = parm.previousthread
  273.     waitForThread parm.previousthread
  274.     local.VehicleName jumpto $police2_movie_start
  275.     local.Vehicle randomint 100
  276.     local.Vehicle ifgreater 50 local.VehicleName string "$policetruck2_movie"
  277.     local.Vehicle iflessequal 50 local.VehicleName string "$policecar2_movie"
  278.     $policecar2_siren_movie bind local.VehicleName
  279.     local.WaitTime randomint 10
  280.     local.WaitTime += 1
  281.     wait local.WaitTime
  282.     local.Movie ifequal 1 wait 15
  283.     local.Movie = 0
  284.  
  285.       goto PoliceCar2_Movie_Loop
  286.      end
  287.  
  288. movieend2:        // Car2 stop going
  289. end
  290.  
  291. //==========================================
  292. // Police Car #2 explode
  293. //==========================================
  294. Police2_Movie_CarExplode:
  295.     local.VehicleName string parm.VehicleName
  296.     local.VehicleName time 0.6
  297.     local.VehicleName moveUp    128
  298.     local.VehicleName moveNorth  24
  299.     local.VehicleName rotateZup  -60
  300.     trigger $police2_movie_boom
  301.     //local.VehicleName shatter "1 1 1" 20 10 40 .05 0
  302.     $policecar2_siren_movie playsound "environment/alarm/police/siren2down.wav" 3
  303.       waitFor local.VehicleName
  304.  
  305.     local.VehicleName time 0.3
  306.     local.VehicleName moveUp    64
  307.     local.VehicleName moveNorth   12
  308.     local.VehicleName rotateZup  -30
  309.       waitFor local.VehicleName
  310.  
  311.     local.VehicleName time 0.9
  312.     local.VehicleName moveDown  128
  313.     local.VehicleName moveNorth    36
  314.     local.VehicleName rotateZup  -90
  315.     trigger $police2_movie_boom
  316.     local.VehicleName shatter "1 1 1" 40 20 40 .05 0
  317.       waitFor local.VehicleName
  318.  
  319.     local.VehicleName hide
  320.     local.VehicleName time 0.1
  321.     local.VehicleName rotateZup  180
  322.     trigger $police2_movie_boom
  323.       waitFor local.VehicleName
  324.      end
  325.  
  326. //==========================================
  327. // First Camera Thread - MAIN CINEMATIC
  328. //==========================================
  329. camera_thread:
  330.     $pigeon speed 10
  331.     $pigeon moveto $pigeonstart
  332.     $camera moveto $pigeonstart
  333.     $camera follow $pigeon
  334.     $pigeon followpath $pigeonstart
  335.     cueplayer
  336.     $camera jumpcut
  337.     cuecamera $camera
  338.     fadein 2 0 0 0
  339.      end
  340.  
  341. //==========================================
  342. // Pigeon Thread - MAIN CINEMATIC
  343. //==========================================
  344. pigeon_thread:
  345.     $skip_trigger notrigger
  346.     $pigeon nextanim pigeon_fly
  347.     wait 1.5
  348.     $skip_trigger notrigger
  349.     $pigeon nextanim coast
  350.     wait 2.3
  351.     $pigeon nextanim pigeon_fly
  352.     wait 4
  353.     $pigeon nextanim coast
  354.     $pigeon nextanim coast
  355.     wait 4.5
  356.     $pigeon nextanim pigeon_fly
  357.     wait 1.5
  358.     $cinematic_thug1 anim attack
  359.     $pigeon nextanim coast
  360.     wait .8
  361.     music aux6 none
  362.     wait .2
  363.     trigger $cinematic_sound1
  364.     $pigeon gib 1 30 1 organic    // Piegon Dies
  365.     $pigeon gib 20 30 1 feather
  366.     wait .5
  367.     skipthread ""            // no longer a cinematic
  368.     thread camera2_thread
  369.     level.camera2thread = parm.previousthread
  370.      end
  371.  
  372. //==========================================
  373. // Cinematic actors ignore thread
  374. //==========================================
  375. ignore_thread:
  376.     local.self ignoreall
  377.     pause
  378.     goto ignore_thread
  379.      end
  380.  
  381. //==========================================
  382. // 2nd and 3rd Cinematic Camera Setup - MAIN CINEMATIC
  383. //==========================================
  384. camera2_thread:
  385.     level.camera2started = 1
  386.     $camera follow $node $lookatme
  387.     wait 2
  388.     thread camera3_thread
  389.     $camera follow $cam2start $lookatme
  390.     wait 2
  391.     $camera pause
  392.     wait 5
  393.     $camera continue
  394.     thread move_lookatme_thread
  395.     wait 8
  396.     fadeout 1 0 0 0
  397.     noncinematic        // we are no longer a cinematic
  398.     cueplayer
  399.     thread mainthread
  400.     thread start_action_thread
  401.      end
  402.  
  403. camera3_thread:
  404.     music aux7
  405.     parm.thug1 string $cinematic_thug1
  406.     parm.thug2 string $cinematic_thug2
  407.     thread dialog::thug_too_easy
  408.     thread helicopter_ride_thread
  409.     wait 1
  410.     $cinematic_thug1 anim talk2
  411.     wait 2
  412.     $cinematic_thug1 anim talk1
  413.     wait 1.5
  414.     $cinematic_thug1 anim talk2
  415.     wait 2.5
  416.     $cinematic_thug1 anim laugh2
  417.     wait .5
  418.     $cinematic_thug2 anim laugh2
  419.     wait 1
  420.     $cinematic_thug1 anim talk1
  421.     wait .5
  422.     $cinematic_thug2 anim talk1
  423.     wait 4.5
  424.     parm.thug1 string $cinematic_thug1
  425.     parm.thug2 string $cinematic_thug2
  426.     thread dialog::blade_suprise
  427.      end
  428.  
  429. move_lookatme_thread:
  430.     $lookatme time 5
  431.     $lookatme moveUp 128
  432.     waitFor $lookatme
  433.     $lookatme time 3.5
  434.     $lookatme moveUp 148
  435.     $lookatme moveEast 384
  436.     $lookatme moveSouth 96
  437.     waitFor $lookatme
  438.      end
  439.  
  440. //==========================================
  441. // Roof Cinematic - ROOF CINMEATIC
  442. //==========================================
  443. roofcam_thread:
  444.     cinematic
  445.     skipthread "roofcam_skip"
  446.     trigger $glass2
  447.     $helicopter time .1
  448.     $helicopter notsolid
  449.     $helicopter moveto $roofhelistart
  450.     *1 hide
  451.     $heligun show
  452.     $roofblade show
  453.     fadein 1 0 0 0
  454.     hud 0
  455.     freezeplayer
  456.     thread roofheli_thread
  457.     $roofcam jumpcut
  458.     $roofcam moveto $roofcamstart
  459.     $roofcam lookat $roofblade
  460.     freezeplayer
  461.     cuecamera $roofcam
  462.     $roofblade thread roofblade_thread
  463.     $roofcam follow $roofcamstart $roofblade
  464.     wait 6
  465.     $roofcam follow $roofblade
  466.     waitFor $roofcam
  467.     game.intro_start = 1        // Telling bank what exit player took
  468.     //thread exit_level_thread
  469.      end
  470.  
  471. roofblade_thread:
  472.     thread exit_anyhow_roof
  473.     $roofblade anim 1hand_idle3
  474.     wait 3.5
  475.     local.self walkto $roofpath1
  476.     waitFor $roofblade
  477.     local.self walkto $roofpath2
  478.     wait 1
  479.     fadeout 1 0 0 0
  480.     waitFor $roofblade
  481.     map bank$start1
  482.      end
  483.  
  484. exit_anyhow_roof:
  485.     wait 8
  486.     map bank$start1
  487.      end
  488.  
  489. roofcam_skip:
  490.     noncinematic
  491.     fadeout    1 0 0 0
  492.     wait 1
  493.     map bank$start1
  494.      end
  495.  
  496. //==========================================
  497. // Ground Cinematic - GROUND CINEMATIC
  498. //==========================================
  499. groundcam_thread:
  500.     cinematic
  501.     skipthread groundcam_skip
  502.     *1 hide
  503.     $heligun show
  504.     $helicopter notsolid
  505.     $groundblade show
  506.     $groundblade thread groundblade_thread
  507.     $groundcam follow $groundcam_start $groundblade
  508.     $groundcam jumpcut
  509.     freezeplayer
  510.     cuecamera $groundcam
  511.     fadein 1 0 0 0
  512.     wait 4
  513.     $groundcam follow $groundblade
  514.     game.intro_start = 2        // Telling bank what exit player took
  515.     //thread exit_level_thread
  516.     wait 10
  517.      end
  518.  
  519. groundblade_thread:
  520.     thread end_level2_nomatterwhat
  521.     $groundblade anim 1hand_idle3
  522.     wait 3.5
  523.     local.self walkto $groundpath1
  524.     waitFor $groundblade
  525.     local.self runto $groundpath2
  526.     waitFor $groundblade
  527.     $groundblade runto $groundpath7
  528.     waitFor $groundblade
  529.     thread end_level2
  530.     $groundblade runto $groundpath8
  531.     waitFor $groundblade
  532.      end
  533.  
  534. end_level2:
  535.     fadeout 1 0 0 0
  536.     wait 1.5
  537.     map bank$start2
  538.      end
  539.  
  540. end_level2_nomatterwhat:    // Exit level anyhow if blade dosen't reach pathnodes.
  541.     wait 10
  542.     fadeout 1 0 0 0
  543.     wait 1
  544.     map bank$start2
  545.      end
  546.  
  547. groundcam_skip:
  548.     noncinematic
  549.     fadeout 1 0 0 0
  550.     wait 1
  551.     map bank$start
  552.      end
  553.  
  554. //******************************************
  555. //==========================================
  556. // End of Cinematic section
  557. //==========================================
  558. //******************************************
  559.  
  560.  
  561. //******************************************
  562. //==========================================
  563. // Other level threads
  564. //==========================================
  565. //******************************************
  566.  
  567. //==========================================
  568. // Banktime Console
  569. //==========================================
  570. banktimecon:
  571.     $banktime    time    10
  572.     $banktime    rotateY    10
  573.     level.hour = 3
  574.     level.tens = 1
  575.     level.mins = 2
  576.  
  577. banktimeconprint:
  578.     level.digit1 = level.tens
  579.     level.digit2 = level.mins
  580.  
  581.     local.PrintString string "xl 0 jcy fc 1 1 1 1.0 string \""
  582.     level.hour ifequal 1  local.PrintString append " 1:\" xl 60 jcy fc 1 1 1 1.0 string \""
  583.     level.hour ifequal 2  local.PrintString append " 2:\" xl 60 jcy fc 1 1 1 1.0 string \""
  584.     level.hour ifequal 3  local.PrintString append " 3:\" xl 60 jcy fc 1 1 1 1.0 string \""
  585.     level.hour ifequal 4  local.PrintString append " 4:\" xl 60 jcy fc 1 1 1 1.0 string \""
  586.     level.hour ifequal 5  local.PrintString append " 5:\" xl 60 jcy fc 1 1 1 1.0 string \""
  587.     level.hour ifequal 6  local.PrintString append " 6:\" xl 60 jcy fc 1 1 1 1.0 string \""
  588.     level.hour ifequal 7  local.PrintString append " 7:\" xl 60 jcy fc 1 1 1 1.0 string \""
  589.     level.hour ifequal 8  local.PrintString append " 8:\" xl 60 jcy fc 1 1 1 1.0 string \""
  590.     level.hour ifequal 9  local.PrintString append " 9:\" xl 60 jcy fc 1 1 1 1.0 string \""
  591.     level.hour ifequal 10 local.PrintString append "10:\" xl 60 jcy fc 1 1 1 1.0 string \""
  592.     level.hour ifequal 11 local.PrintString append "11:\" xl 60 jcy fc 1 1 1 1.0 string \""
  593.     level.hour ifequal 12 local.PrintString append "12:\" xl 60 jcy fc 1 1 1 1.0 string \""
  594.  
  595.     level.digit1 ifequal 0 local.PrintString append "0\" xl 80 jcy fc 1 1 1 1.0 string \""
  596.     level.digit1 ifequal 1 local.PrintString append "1\" xl 80 jcy fc 1 1 1 1.0 string \""
  597.     level.digit1 ifequal 2 local.PrintString append "2\" xl 80 jcy fc 1 1 1 1.0 string \""
  598.     level.digit1 ifequal 3 local.PrintString append "3\" xl 80 jcy fc 1 1 1 1.0 string \""
  599.     level.digit1 ifequal 4 local.PrintString append "4\" xl 80 jcy fc 1 1 1 1.0 string \""
  600.     level.digit1 ifequal 5 local.PrintString append "5\" xl 80 jcy fc 1 1 1 1.0 string \""
  601.     level.digit1 ifequal 6 local.PrintString append "6\" xl 80 jcy fc 1 1 1 1.0 string \""
  602.     level.digit1 ifequal 7 local.PrintString append "7\" xl 80 jcy fc 1 1 1 1.0 string \""
  603.     level.digit1 ifequal 8 local.PrintString append "8\" xl 80 jcy fc 1 1 1 1.0 string \""
  604.     level.digit1 ifequal 9 local.PrintString append "9\" xl 80 jcy fc 1 1 1 1.0 string \""
  605.  
  606.     level.digit2 ifequal 0 local.PrintString append "0\""
  607.     level.digit2 ifequal 1 local.PrintString append "1\""
  608.     level.digit2 ifequal 2 local.PrintString append "2\""
  609.     level.digit2 ifequal 3 local.PrintString append "3\""
  610.     level.digit2 ifequal 4 local.PrintString append "4\""
  611.     level.digit2 ifequal 5 local.PrintString append "5\""
  612.     level.digit2 ifequal 6 local.PrintString append "6\""
  613.     level.digit2 ifequal 7 local.PrintString append "7\""
  614.     level.digit2 ifequal 8 local.PrintString append "8\""
  615.     level.digit2 ifequal 9 local.PrintString append "9\""
  616.  
  617.     %introcon    conlayout    local.PrintString
  618.  
  619.     wait 60        // Wait time
  620.  
  621.     level.mins += 1
  622.     level.mins ifequal 10 goto uptens
  623.     goto banktimeconprint
  624.  
  625. uptens:
  626.     level.mins *= 0
  627.     level.tens += 1
  628.     level.tens ifequal 6 goto uphour
  629.     goto banktimeconprint
  630.  
  631. uphour:
  632.     level.tens *= 0
  633.     level.hour += 1
  634.     level.hour ifequal 13 goto switch
  635.     goto banktimeconprint
  636.  
  637. switch:
  638.     level.hour = 1
  639.     goto banktimeconprint
  640.      end
  641.  
  642. //==========================================
  643. // Neat stuff
  644. //==========================================
  645. t1000_secret:
  646.     $t1000origin    notsolid
  647.     $t1000origin    hide
  648.     $t1000 bind $t1000origin
  649.     wait .1
  650.     $t1000origin jumpto $t1000way1
  651.     $t1000 ignoreall
  652.     $t1000 anim sitting
  653.     //    $motorcycle    time    .2
  654.     //    $motorcycle    rotateYdown    180
  655.     //    waitFor $motorcycle
  656.     wait .1
  657.     $t1000 bind $motorcycle
  658.     wait .1
  659.     $t1000 group all +envmapped
  660.     $motorcycle    jumpto    $motoway2
  661.     $motorcycle    ontrigger start_t1000_secret
  662.     pause
  663.  
  664. start_t1000_secret:
  665.     $motoremove1 remove
  666.     $motoportal open
  667.     thread dialog::blade_what_the
  668.     trigger    $motobigexpl1
  669.     $motobreak1 shatter "0 180 0" 150 10 40 .4 0
  670.     $motobreak1 playsound    impact/comp_explode/cmpmx3.wav 4 8 -1
  671.     $motobreak1 remove
  672.     wait 2
  673.     $motorcycle    playsound    vehicle/atv/strt.wav 4 8 -1
  674.     wait 2
  675.     $motorcycle    playsound    vehicle/humvee/skid.wav 4 8 -1
  676.     $motorcycle followpath $motospline
  677.     waitFor $motorcycle
  678.     $motorcycle shatter "1 1 1" 20 10 40 .1 0
  679.     $motorcycle remove
  680.     $t1000 remove
  681.     trigger $motoexploder
  682.      end
  683.  
  684. tree_counter:
  685.     level.tree_death_toll += 1
  686.     //    print level.tree_death_toll
  687.     level.tree_death_toll ifequal 3 trigger $motorcycle
  688.      end
  689.  
  690. //==========================================
  691. // Goofy Alley sign getting shot thread
  692. //==========================================
  693. shootsign:
  694.     $shootsign1 ondamage sign_message
  695.     pause
  696.  
  697. sign_message:
  698.     $shootsign1 nodamage
  699.     thread dialog::jc_what_are_you_shooting_at1
  700.     local.waitforthread = parm.previousthread
  701.     waitForThread parm.previousthread
  702.     thread dialog::blade_can_it_jc
  703.      end
  704.  
  705. //==========================================
  706. // Turret Skill level settings
  707. //==========================================
  708. SkillLevelSettings:
  709.     local.skilllevel getcvar skill
  710.     //easy
  711.     local.skilllevel ifequal 0 $turret1 rocketrate 10
  712.     local.skilllevel ifequal 0 $turret2 rocketrate 8
  713.     local.skilllevel ifequal 0 $turret3 rocketrate 10
  714.     local.skilllevel ifequal 0 $turret1 health 500
  715.     local.skilllevel ifequal 0 $turret2 health 500
  716.     local.skilllevel ifequal 0 $turret3 health 800
  717.     //medium
  718.     local.skilllevel ifequal 1 $turret1 rocketrate 8
  719.     local.skilllevel ifequal 1 $turret2 rocketrate 6
  720.     local.skilllevel ifequal 1 $turret3 rocketrate 8
  721.     local.skilllevel ifequal 1 $turret1 health 1400
  722.     local.skilllevel ifequal 1 $turret2 health 1000
  723.     local.skilllevel ifequal 1 $turret3 health 1200
  724.     //hard
  725.     local.skilllevel ifequal 2 $turret1 rocketrate 4
  726.     local.skilllevel ifequal 2 $turret2 rocketrate 4
  727.     local.skilllevel ifequal 2 $turret3 rocketrate 4
  728.     local.skilllevel ifequal 2 $turret1 health 1500
  729.     local.skilllevel ifequal 2 $turret2 health 1500
  730.     local.skilllevel ifequal 2 $turret3 health 1600
  731.     $turret1    lagtime    1
  732.     $turret2    lagtime    1
  733.     $turret3    lagtime    1
  734.      end
  735.  
  736. //==========================================
  737. // Mission Status
  738. //==========================================
  739. MissionComputer:
  740. //0 nd 1 succeed 2 fail
  741. // level.PObjective1 --> Destroy Rocket Turrets
  742. // level.PObjective2 --> Eliminate All Enemy Forces
  743. // level.PObjective3 --> Gain Entry Into The Bank
  744. // level.SObjective1 --> Minimize Civilian Casualties
  745. %missioncon conlayout "xv -72 yv 76 fc 0.6 0.6 1 1 string \"Air Assault On FCB\""
  746. %missioncon conapplayout "xv -120 yv 60 fc 0.4 0.4 0.8 1 string \"Primary Objective(s):\""
  747. level.PObjective1 ifequal 0 %missioncon conapplayout "xv -118 yv 48 spicn b_blank 0.5 0.5 xv -116 yv 48 fc 0.7 0.7 0.7 1 string \" Destroy Rocket Turrets\""
  748. level.PObjective2 ifequal 0 %missioncon conapplayout "xv -118 yv 36 spicn b_blank 0.5 0.5 xv -116 yv 36 fc 0.7 0.7 0.7 1 string \" Eliminate All Enemy Forces\""
  749. level.PObjective3 ifequal 0 %missioncon conapplayout "xv -118 yv 24 spicn b_blank 0.5 0.5 xv -116 yv 24 fc 0.7 0.7 0.7 1 string \" Gain Entry Into The Bank\""
  750.  
  751. level.PObjective1 ifequal 1 %missioncon conapplayout "xv -118 yv 48 spicn b_checked 0.5 0.5 xv -116 yv 48 fc 0.3 0.3 0.3 1 string \" Destroy Rocket Turrets\""
  752. level.PObjective2 ifequal 1 %missioncon conapplayout "xv -118 yv 36 spicn b_checked 0.5 0.5 xv -116 yv 36 fc 0.3 0.3 0.3 1 string \" Eliminate All Enemy Forces\""
  753. level.PObjective3 ifequal 1 %missioncon conapplayout "xv -118 yv 24 spicn b_checked 0.5 0.5 xv -116 yv 24 fc 0.3 0.3 0.3 1 string \" Gain Entry Into The Bank\""
  754.  
  755. level.PObjective1 ifequal 2 %missioncon conapplayout "xv -118 yv 48 spicn b_notchecked 0.5 0.5 xv -116 yv 48 fc 0.3 0.3 0.3 1 string \" Destroy Rocket Turrets\""
  756. level.PObjective2 ifequal 2 %missioncon conapplayout "xv -118 yv 36 spicn b_notchecked 0.5 0.5 xv -116 yv 36 fc 0.3 0.3 0.3 1 string \" Eliminate All Enemy Forces\""
  757. level.PObjective3 ifequal 2 %missioncon conapplayout "xv -118 yv 24 spicn b_notchecked 0.5 0.5 xv -116 yv 24 fc 0.3 0.3 0.3 1 string \" Gain Entry Into The Bank\""
  758.  
  759. %missioncon conapplayout "xv -120 yv 0 fc 0.4 0.4 0.8 1 string \"Secondary Objective(s):\""
  760. level.SObjective1 ifequal 0 %missioncon conapplayout "xv -118 yv -12 spicn b_blank 0.5 0.5 xv -116 yv -12 fc 0.7 0.7 0.7 1 string \" Minimize Hardcorp Casualties\""
  761. level.SObjective1 ifequal 1 %missioncon conapplayout "xv -118 yv -12 spicn b_checked 0.5 0.5 xv -116 yv -12 fc 0.3 0.3 0.3 1 string \" Minimize Hardcorp Casualties\""
  762. level.SObjective1 ifequal 2 %missioncon conapplayout "xv -118 yv -12 spicn b_notchecked 0.5 0.5 xv -116 yv -12 fc 0.3 0.3 0.3 1 string \" Minimize Hardcorp Casualties\""
  763. end
  764.  
  765. //==========================================
  766. // Billboard destroyed thread1
  767. //==========================================
  768. billboard_thread:
  769.     $billboard hide
  770.     $billboard2 bind $billboard
  771.     $fountain_flood time .1
  772.     $fountain_flood moveDown 10
  773.     waitFor $fountain_flood
  774.     game.intro_billboard_fall ifequal 0 game.intro_billboard_fall = 1
  775.     $billboard_left ondamage billboard_fall_sequence_left
  776.     $billboard_right ondamage billboard_fall_sequence_right
  777.     pause
  778.  
  779. billboard_fall_sequence_left:
  780.     $billboard_left nodamage
  781.     $billboard_right nodamage
  782.     game.intro_billboard_fall = 2
  783.     wait .3
  784.     $billboard time .4
  785.     $billboard rotateXdown 56
  786.     $billboard moveWest 64
  787.     $billboard moveDown 30
  788.     waitFor $billboard
  789.     $billboard time .7
  790.     $billboard rotateXdown 98
  791.     $billboard rotateZup 5
  792.     $billboard moveDown 495
  793.     $billboard moveSouth 16
  794.     $billboard moveWest 128
  795.     waitFor $billboard
  796.     $billboard time .5
  797.     $billboard rotateXdown 85
  798.     $billboard rotateZup 5
  799.     $billboard moveDown 495
  800.     $billboard moveSouth 16
  801.     $billboard moveWest 128
  802.     waitFor $billboard
  803.     $billboard time .4
  804.     $billboard rotateXdown 71
  805.     $billboard rotateZup 5
  806.     $billboard moveDown 490
  807.     $billboard moveSouth 16
  808.     $billboard moveWest 107
  809.     waitFor $billboard
  810.     $billboard playsound impact/crates/crate3.wav 3.0
  811.     $glass1 remove
  812.     $glass2 shatter "0 0 0" 25 10 75 .5 0
  813.     $glass3 remove
  814.     $glass2 remove
  815.     $window_bar1 time .5
  816.     $window_bar1 moveDown 368
  817.     $window_bar1 rotateXup 22
  818.     $window_bar1 rotateYup 30
  819.     $window_bar1 moveWest 16
  820.     waitFor $window_bar1
  821.      goto bottom1
  822.  
  823.  
  824. //==========================================
  825. // Billboard destroyed thread2
  826. //==========================================
  827. billboard_fall_sequence_right:
  828.     $billboard_left nodamage
  829.     $billboard_right nodamage
  830.     game.intro_billboard_fall = 3
  831.     wait .3
  832.     $billboard time .4
  833.     $billboard rotateXdown 56
  834.     $billboard moveWest 64
  835.     $billboard moveDown 30
  836.     waitFor $billboard
  837.     $billboard time .7
  838.     $billboard rotateXdown 98
  839.     $billboard rotateZup 5
  840.     $billboard moveDown 495
  841.     $billboard moveSouth 16
  842.     $billboard moveWest 128
  843.     waitFor $billboard
  844.     $billboard time .5
  845.     $billboard rotateXdown 85
  846.     $billboard rotateZup 5
  847.     $billboard moveDown 495
  848.     $billboard moveSouth 16
  849.     $billboard moveWest 128
  850.     waitFor $billboard
  851.     $billboard time .4
  852.     $billboard rotateXdown 71
  853.     $billboard rotateZup 5
  854.     $billboard moveDown 490
  855.     $billboard moveSouth 16
  856.     $billboard moveWest 107
  857.     waitFor $billboard
  858.     $billboard playsound impact/crates/crate3.wav 3.0
  859.     $glass2 shatter "0 0 0" 25 10 75 .5 0
  860.     $glass1 remove
  861.     $glass2 remove
  862.     $glass3 remove
  863.     wait .2
  864.     $billboard time .7
  865.     $window_bar1 time .7
  866.     $window_bar2 time .7
  867.     $window_bar1 moveDown 368
  868.     $window_bar1 rotateXup 22
  869.     $window_bar1 rotateYdown 15
  870.     $window_bar1 moveWest 16
  871.     $window_bar2 moveDown 368
  872.     $window_bar2 rotateXup 22
  873.     $window_bar2 rotateYup 30
  874.     $window_bar2 moveWest 16
  875.     $billboard moveDown 356
  876.     $billboard rotateXup 20
  877.     $billboard rotateZdown 20
  878.     waitFor $billboard
  879.     $fountain_flood time 15
  880.     $fountain_flood moveUp 15
  881.     thread bottom2
  882.     waitFor $fountain_flood
  883.      end
  884.  
  885. bottom1:
  886.       thread dialog::jc_dead_billboard1
  887.     local.waitforthread = parm.previousthread
  888.     waitForThread parm.previousthread
  889.      end
  890.  
  891. bottom2:
  892.     thread dialog::jc_dead_billboard1
  893.     local.waitforthread = parm.previousthread
  894.     waitForThread parm.previousthread
  895.      end
  896.  
  897.  
  898. //==========================================
  899. // Awning at entrance setup thread
  900. //==========================================
  901. bank_entrance_thread:
  902.     $pillar time .6
  903.     $awning1 time .6
  904.     $awning2 time .6
  905.     $awning3 time .6
  906.     $pillar ontrigger bank_entrance_collapse
  907.     pause
  908.  
  909. bank_entrance_collapse:
  910.     $pillar notrigger
  911.     $awning2 shatter "0 0 0" 25 10 75 .10 0
  912.     $pillar rotateZdown 45
  913.     waitFor $pillar
  914.     $pillar rotateZdown 45
  915.     $awning1 rotateZup 45
  916.     $awning2 moveDown 128
  917.     waitFor $awning2
  918.     $awning3 moveDown 100
  919.     $awning1 moveDown 128
  920.     $awning2 moveDown 128
  921.     $awning1 moveSouth 32
  922.     $awning2 rotateZdown 15
  923.     waitFor $awning2
  924.      end
  925.  
  926. pillar:
  927.     $awning2    ondamage start_pillar
  928.     $awning1    ondamage start_pillar
  929.     $pillar ondamage start_pillar
  930.     pause
  931.  
  932. start_pillar:
  933.     $pillar    nodamage
  934.     $awning2    nodamage
  935.     $awning1    nodamage
  936.     trigger $pillar
  937.         level.piller = 2
  938.     level.SObjective1 = 1
  939.     thread MissionComputer
  940.     thread global/universal_script.scr::SObjectiveComplete
  941.      end
  942.  
  943. //==========================================
  944. // Ammo box #1
  945. //==========================================
  946. ammo1_thread:
  947.     $ammo1_roof time 1
  948.     $ammo1 ondamage ammo1_sequence
  949.     pause
  950.  
  951. ammo1_sequence:
  952.     $ammo1 nodamage
  953.     trigger $ammo1_explode
  954.     $ammo1 shatter "0 0 0" 75 10 75 .2 0
  955.     wait .2
  956.     $ammo1 notsolid
  957.     $ammo1 hide
  958.     $ammo1_roof rotateXdown 15
  959.     $ammo1_roof rotateZdown 15
  960.     waitFor $ammo1_roof
  961.     $ammo1_roof moveDown    128
  962.     waitFor $ammo1_roof
  963.      end
  964.  
  965. //==========================================
  966. // Ammo box #2
  967. //==========================================
  968. ammo2_thread:
  969.     game.intro_roof_break1 ifequal 0 game.intro_roof_break1 = 1
  970.     $ammo2_roof time .5
  971.     $ammo2_wall1 time 1.2
  972.     $ammo2_wall2 time 1.2
  973.     $ammo2 ondamage ammo2_sequence
  974.     pause
  975.  
  976. ammo2_sequence:
  977.     $ammo2 nodamage
  978.     game.intro_roof_break1 = 2
  979.     trigger $ammo2_explode
  980.     $ammo2 shatter "0 0 0" 75 10 75 .2 0
  981.     wait .2
  982.     $ammo2 notsolid
  983.     $ammo2 hide
  984.     $ammo2_roof rotateXdown 15
  985.     $ammo2_roof rotateZdown 15
  986.     waitFor $ammo2_roof
  987.     $ammo2_roof moveDown    128
  988.     waitFor $ammo2_roof
  989.      end
  990.  
  991. //------------------------------------------
  992. //******************************************
  993. //==========================================
  994. // ALL HELICOPTER STUFF
  995. //==========================================
  996. //******************************************
  997. //------------------------------------------
  998.  
  999. //==========================================
  1000. // Helicopter setup thread
  1001. //==========================================
  1002. helicopter_setup_thread:
  1003.     $rotors_brush notsolid            // Rotor origin
  1004.     $rotors_brush hide            // Rotor origin
  1005.     $rotors_brush bind $helicopter
  1006.     $heligun_origin bind $helicopter
  1007.     $blade2 bind $heligun_origin
  1008.     $heligun bind $heligun_origin
  1009.     $heli_fuckshitup bind $helicopter    // Random sound emitter
  1010.     wait .1
  1011.     $rotors bind $rotors_brush
  1012.     wait .1
  1013.     $rotors_brush time 1            // Start rotors spinning
  1014.     $rotors_brush rotateY 720
  1015.      end
  1016.  
  1017. //==========================================
  1018. // Random sounds played from heli
  1019. //==========================================
  1020. random_sounds:
  1021.     wait 10
  1022.  
  1023. random_sound_loop:
  1024.     wait 10
  1025.     local.rndsnd randomint 5
  1026.     local.rndsnd ifequal 1 goto combat_one
  1027.     local.rndsnd ifequal 2 goto combat_two
  1028.     local.rndsnd ifequal 3 goto combat_five
  1029.     local.rndsnd ifequal 4 goto combat_six
  1030.     local.rndsnd ifequal 5 goto combat_seven
  1031.      end
  1032.  
  1033. combat_one:
  1034.     parm.actor1    string    "$heli_fuckshitup"
  1035.     thread dialog::combat_one
  1036.     local.waitforthread = parm.previousthread
  1037.     waitForThread parm.previousthread
  1038.     goto random_sound_loop
  1039.      end
  1040.  
  1041. combat_two:
  1042.     parm.actor1    string    "$heli_fuckshitup"
  1043.     thread dialog::combat_two
  1044.     local.waitforthread = parm.previousthread
  1045.     waitForThread parm.previousthread
  1046.     goto random_sound_loop
  1047.      end
  1048.  
  1049. combat_five:
  1050.     parm.actor1    string    "$heli_fuckshitup"
  1051.     thread dialog::combat_five
  1052.     local.waitforthread = parm.previousthread
  1053.     waitForThread parm.previousthread
  1054.     goto random_sound_loop
  1055.      end
  1056.  
  1057. combat_six:
  1058.     parm.actor1    string    "$heli_fuckshitup"
  1059.     thread dialog::combat_six
  1060.     local.waitforthread = parm.previousthread
  1061.     waitForThread parm.previousthread
  1062.     goto random_sound_loop
  1063.      end
  1064.  
  1065. combat_seven:
  1066.     parm.actor1    string    "$heli_fuckshitup"
  1067.     thread dialog::combat_seven
  1068.     local.waitforthread = parm.previousthread
  1069.     waitForThread parm.previousthread
  1070.     goto random_sound_loop
  1071.      end
  1072.  
  1073. //==========================================
  1074. // Helicopter damage dialog thread
  1075. //==========================================
  1076. heli_damage_dialog:
  1077.     level.helidamage ifgreater 500 goto nextmessage1
  1078.     wait 1
  1079.     goto heli_damage_dialog
  1080.  
  1081. nextmessage1:
  1082.     thread dialog::pilot_hit2
  1083.  
  1084. nextmessage1a:
  1085.     level.helidamage ifgreater 900 goto nextmessage2
  1086.     wait 1
  1087.     goto nextmessage1a
  1088.  
  1089. nextmessage2:
  1090.     thread dialog::pilot_hit1
  1091.  
  1092. nextmessage2a:
  1093.     level.helidamage ifgreater 1250 goto nextmessage3
  1094.     wait 1
  1095.     goto nextmessage2a
  1096.  
  1097. nextmessage3:
  1098.     thread dialog::pilot_hit3
  1099.  
  1100. nextmessage3a:
  1101.     level.helidamage ifgreater 1550 goto nextmessage4
  1102.     wait 1
  1103.     goto nextmessage3a
  1104.  
  1105. nextmessage4:
  1106.     thread dialog::pilot_sec_airsupport
  1107.  
  1108. nextmessage4a:
  1109.     level.helidamage ifgreater 1800 goto nextmessage5
  1110.     wait 1
  1111.     goto nextmessage4a
  1112.  
  1113. nextmessage5:
  1114.     thread dialog::jc_chopper_repair
  1115.  
  1116. nextmessage5a:
  1117.     level.helidamage ifgreater 2000 goto nextmessage6
  1118.     wait 1
  1119.     goto nextmessage5a
  1120.  
  1121. nextmessage6:
  1122.     thread dialog::pilot_going_down
  1123.  
  1124. nextmessage6a:
  1125.     level.helidamage ifgreater 2500 goto fucked
  1126.     wait 1
  1127.     goto nextmessage6a
  1128.  
  1129. fucked:
  1130.     level.PObjective1 = 2
  1131.     level.PObjective2 = 2
  1132.     level.PObjective3 = 2
  1133.     level.SObjective1 = 2
  1134.     thread MissionComputer
  1135.     thread global/universal_script.scr::PObjectiveFailed
  1136.     cueplayer
  1137.     *1 playerkill
  1138.     wait 2.5
  1139.     *1 respawn
  1140.      end
  1141.  
  1142. //==========================================
  1143. // Helicopter Damage sounds
  1144. //==========================================
  1145. heli_hit:
  1146.     level.hitme_hit ifequal 1 goto heli_already_hit
  1147.     level.hitme_hit = 1
  1148.     $rotors playsound misc/null.wav 1 7
  1149.     wait .1
  1150.     $rotors playsound vehicle/helicopt/hit1.wav 2 7
  1151.     wait 3.8
  1152.     $rotors playsound vehicle/helicopt/flyloop.wav 2 7
  1153.     level.hitme_hit = 0
  1154.      end
  1155.  
  1156. heli_already_hit:
  1157.     end
  1158.  
  1159. //==========================================
  1160. // Helicopter Start moving
  1161. //==========================================
  1162. helicopter_ride_thread:            // This is called by thugs talking
  1163.     thread helicopter_setup_thread
  1164.     waitForThread parm.previousthread
  1165.  
  1166. start_copter:                // Copter coming from around the corner
  1167.     wait 2
  1168.     $helicopter followpath $path1_startintro
  1169.     wait 3
  1170.     $rotors playsound vehicle/helicopt/flyloop.wav 2 7
  1171.     waitFor $helicopter
  1172.      end
  1173.  
  1174. start_action_thread:
  1175.     hud 1
  1176.     //releaseplayer
  1177.     $helicopter lock
  1178.     $helicopter doUse *1
  1179.     $blade2    remove
  1180.     $heligun hide
  1181.     $cinematic_thug1    remove
  1182.     $cinematic_thug2    remove
  1183.     thread move_dudes_up
  1184.     releaseplayer
  1185.     fadein 1 0 0 0
  1186.     wait 1
  1187.     music normal
  1188.     thread thugs_attacked_dialog1
  1189.     thread blade_talksmack1
  1190.  
  1191. //==========================================
  1192. // Kill both thugs setup thread
  1193. // This is where the game should jump to
  1194. // if the cinematic is killed
  1195. //==========================================
  1196. kill_cinematic_thugs:
  1197.     thread hover_path
  1198.     local.deathindex = 0
  1199.     level.hoverpathover = 0
  1200.  
  1201. kill_cinematic_thugs_loop:
  1202.     $thug_death_counter ontrigger counterup
  1203.     pause
  1204.  
  1205. counterup:
  1206.     local.deathindex += 1
  1207.     local.deathindex ifequal 2 goto start_level_loop
  1208.     goto kill_cinematic_thugs_loop
  1209.      end
  1210.  
  1211. move_dudes_up:            // Lift real thugs up quake1 style :]
  1212.     $remove_me_for_guys    remove
  1213.     $move_guys_up    time    .1
  1214.     $move_guys_up    moveUp    112
  1215.     waitFor $move_guys_up
  1216.      end
  1217.  
  1218. //==========================================
  1219. // Helicopter Hover loop
  1220. //==========================================
  1221. hover_path:
  1222.     $helicopter followpath $hover_path
  1223.     waitFor $helicopter
  1224.  
  1225.     level.hoverpathover ifequal 1 goto start_heli_loop
  1226.     level.hoverpathover ifequal 0 goto hover_path
  1227.      end
  1228.  
  1229.     start_level_loop:
  1230.     level.hoverpathover = 1
  1231.      end
  1232.  
  1233. heli_loop_dialog_start:
  1234.     thread global/universal_script.scr::StatusUpdated
  1235.     local.waitforthread = parm.previousthread
  1236.     waitForThread parm.previousthread
  1237.     thread dialog::jc_remember_boss
  1238.      end
  1239.  
  1240. //==========================================
  1241. // Start helicopter main loop
  1242. //==========================================
  1243. start_heli_loop:
  1244.     thread heli_loop_dialog_start
  1245.     thread main_level_spawn_loop    // Start up main level bad guy spawn loop
  1246.     $helicopter followpath $down_path
  1247.     waitFor $helicopter
  1248.  
  1249. //==========================================
  1250. // Loop copter, check damage, etc.
  1251. //==========================================
  1252. helicopter_loop_sequence:
  1253.     $helicopter followpath $loop_path
  1254.     waitFor $helicopter
  1255.  
  1256.     level.turretsdead ifequal 5 goto helicopter_land_roof
  1257.     level.complete ifgreaterequal 2 goto helicopter_land_roof
  1258.     level.helidamage iflessequal 2000 goto helicopter_loop_sequence
  1259.  
  1260. //==========================================
  1261. // Helicopter Crashing on ground start
  1262. //==========================================
  1263. $helicopter followpath $road_path
  1264.  
  1265.     thread copter_goin_down
  1266.  
  1267.     waitFor $helicopter
  1268.     $rotors playsound misc/null.wav 1 7
  1269.     wait .1
  1270.     $rotors playsound vehicle/helicopt/hidown.wav 1.0 7
  1271.  
  1272.     thread dialog::pilot_were_down_whew_close
  1273.     $helicopter unlock
  1274.     hud 0
  1275.     trigger $rotors_brush
  1276.     fadeout 1 0 0 0
  1277.     wait 1
  1278.     //thread dialog2        // Dialog not available
  1279.     thread groundcam_thread        // Start end ground cinematic
  1280.     goto heli_end
  1281.  
  1282. //==========================================
  1283. // Helicopter lands on roof
  1284. //==========================================
  1285. helicopter_land_roof:
  1286.     level.PObjective3 = 1
  1287.     thread global/universal_script.scr::PObjectiveComplete
  1288.     thread MissionComputer
  1289.  
  1290.       $helicopter followpath $roof_path
  1291.     waitFor $helicopter
  1292.  
  1293.     thread land_roof_dialogue2_thread
  1294.  
  1295.     $helicopter stopsound
  1296.     $helicopter playsound vehicle/helicopt/hidown.wav 1.0 7
  1297.     thread roofcam_thread    // Start end roof cinematic
  1298.     trigger $rotors_brush
  1299.  
  1300. heli_end:
  1301.      end
  1302.  
  1303. //==========================================
  1304. // Helicopter monitor damage thread
  1305. //==========================================
  1306. helicopter_damage_thread:
  1307.  
  1308. helicopter_damage_start:
  1309.     $helicopter ondamage heli_damage_sequence
  1310.     $rotors ondamage heli_damage_sequence
  1311.     pause
  1312.  
  1313. heli_damage_sequence:
  1314.     $helicopter nodamage
  1315.     $rotors nodamage
  1316.     thread heli_hit        // Helicopter damage sounds
  1317.     level.helidamage += local.damage
  1318.     goto helicopter_damage_start
  1319.      end
  1320.  
  1321. //==========================================
  1322. // Helicopter Rotor Spindown
  1323. //==========================================
  1324. rotors_spin_down_thread:
  1325.     level.rotors_speed = 720
  1326.     $rotors_brush ontrigger rotors_spin_down_loop_begin
  1327.     pause
  1328.  
  1329. rotors_spin_down_loop_begin:
  1330.     $rotors_brush notrigger
  1331.     rotors_spin_down_loop:
  1332.     level.rotors_speed -= 5
  1333.     $rotors_brush rotateY level.rotors_speed
  1334.     wait .1
  1335.     level.rotors_speed ifgreater 0 goto rotors_spin_down_loop
  1336.      end
  1337.  
  1338. //==========================================
  1339. // Helicopter Goto Roof
  1340. //==========================================
  1341. roofheli_thread:
  1342.     wait 1
  1343.     $helicopter followpath $roofhelistart
  1344.     waitFor $helicopter
  1345.      end
  1346. //******************************************
  1347. //==========================================
  1348. // End of Helicopter section
  1349. //==========================================
  1350. //******************************************
  1351.  
  1352.  
  1353.  
  1354. //------------------------------------------
  1355. //******************************************
  1356. //==========================================
  1357. // LEVEL DIALOG THREADS
  1358. //==========================================
  1359. //******************************************
  1360. //------------------------------------------
  1361.  
  1362. //==========================================
  1363. // Thugs Talking at start of action
  1364. //==========================================
  1365. thugs_attacked_dialog1:
  1366.     parm.thug1    string    "$dialog_airattack"
  1367.     thread dialog::thug_air_attack
  1368.      end
  1369.  
  1370. thugs_attacked_dialog2:
  1371.     parm.thug1    string    "$dialog_runforcover"
  1372.     thread dialog::thug_get_to_launchers1
  1373.  
  1374. blade_talksmack1:
  1375.     wait 2
  1376.     thread dialog::blade_not_so_fast
  1377.      end
  1378.  
  1379. //==========================================
  1380. // Pilot says "copter goin down!"
  1381. //==========================================
  1382. copter_goin_down:
  1383.     thread dialog::pilot_controls_arent_responding
  1384.     local.waitforthread = parm.previousthread
  1385.     waitForThread parm.previousthread
  1386.     thread dialog::blade_uh_oh
  1387.     wait 2
  1388.     thread dialog::pilot_hang_on1
  1389.      end
  1390.  
  1391. dialog2:
  1392.     wait 3
  1393.     thread dialog::jc_get_in_there
  1394.      end
  1395.  
  1396. land_roof_dialogue1_thread:
  1397.     wait 2
  1398.     thread dialog::jc_rooftop_landin
  1399.     local.waitforthread = parm.previousthread
  1400.     waitForThread parm.previousthread
  1401.      end
  1402.  
  1403. land_roof_dialogue2_thread:
  1404.     thread dialog::pilot_drop_and_dust
  1405.      end
  1406.  
  1407. //------------------------------------------
  1408. //******************************************
  1409. //==========================================
  1410. // LEVEL GAMEPLAY AND LOGIC
  1411. //==========================================
  1412. //******************************************
  1413. //------------------------------------------
  1414.  
  1415. //==========================================
  1416. // Temp scriptobject for turret death level variables
  1417. //==========================================
  1418. turret1_deathreport:
  1419.     $turret1_dead    ontrigger    1change
  1420.     pause
  1421.  
  1422. 1change:
  1423.     $turret1_dead    remove
  1424.     level.turret1_nuked = 1
  1425.      end
  1426.  
  1427. turret2_deathreport:
  1428.     $turret2_dead    ontrigger    2change
  1429.     pause
  1430.  
  1431. 2change:
  1432.     $turret2_dead    remove
  1433.     level.turret2_nuked = 1
  1434.      end
  1435.  
  1436. turret3_deathreport:
  1437.     $turret3_dead    ontrigger    3change
  1438.     pause
  1439.  
  1440. 3change:
  1441.     $turret3_dead    remove
  1442.     level.turret3_nuked = 1
  1443.      end
  1444.  
  1445. //==========================================
  1446. // Main level Loop (for spawning characters.
  1447. // and randomly choosing stuff to happen in
  1448. // the streets)
  1449. //==========================================
  1450. main_level_spawn_loop:
  1451.     level.complete ifgreater 0 thread spawn_levelisdone
  1452.     level.complete ifgreater 0 goto end_main
  1453.     thread spawn_check_bad_guys
  1454.     wait 3
  1455.     goto main_level_spawn_loop
  1456.  
  1457. end_main:
  1458.      end
  1459.  
  1460. //==========================================
  1461. // Psyco spawn BAD GUY checking thread
  1462. //==========================================
  1463. spawn_check_bad_guys:
  1464.     level.count_bad_guys ifequal 3 goto spawn_check_end
  1465.     goto spawn_roof_check
  1466.      end
  1467.  
  1468.     //Spawn guys on roof randomness
  1469. spawn_roof_check:
  1470.     local.rndroof randomint 100
  1471.     local.rndroof iflessequal 33 goto turret1_startspawn
  1472.     local.rndroof ifgreater 33 goto more_roof_rnd
  1473.  
  1474. more_roof_rnd:
  1475.     local.rndroof iflessequal 66 goto turret2_startspawn
  1476.     local.rndroof ifgreater 66 goto turret3_startspawn
  1477.      end
  1478.  
  1479. turret1_startspawn:
  1480.     level.turret1_active ifequal 1 goto spawn_guythere
  1481.     level.turret1_nuked ifequal 1 goto spawn_guythere
  1482.     level.turret1_active ifequal 0 thread spawn_guy_at_turret1
  1483.      end
  1484.  
  1485. turret2_startspawn:
  1486.     level.turret2_active ifequal 1 goto spawn_guythere
  1487.     level.turret2_nuked ifequal 1 goto spawn_guythere
  1488.     level.turret2_active ifequal 0 thread spawn_guy_at_turret2
  1489.      end
  1490.  
  1491. turret3_startspawn:
  1492.     level.turret3_active ifequal 1 goto spawn_guythere
  1493.     level.turret3_nuked ifequal 1 goto spawn_guythere
  1494.     level.turret3_active ifequal 0 thread spawn_guy_at_turret3
  1495.      end
  1496.  
  1497. spawn_levelisdone:
  1498.     level.count_bad_guys ifequal 0 goto obj2_done
  1499.     wait 1
  1500.     goto spawn_levelisdone
  1501.  
  1502. obj2_done:
  1503.     level.complete += 1
  1504.     level.PObjective2 = 1
  1505.     thread MissionComputer
  1506.     thread global/universal_script.scr::PObjectiveComplete
  1507.     wait 1
  1508.     thread land_roof_dialogue1_thread    // Turrets dead, no more baddies
  1509.      end
  1510.  
  1511. spawn_check_end:    // Enough Bad guys
  1512.      end
  1513.  
  1514. spawn_guythere:        // Bad guy already there
  1515.      end
  1516.  
  1517. //==========================================
  1518. //==========================================
  1519. // Turret counter and level.complete state.
  1520. //==========================================
  1521. turret_death_wait:
  1522.     local.turret_death_index = 0
  1523.  
  1524. turret_death_loop:
  1525.     $turret_death_counter    ontrigger    count_turret
  1526.     pause
  1527.  
  1528. count_turret:
  1529.     $turret_death_counter    notrigger
  1530.     local.turret_death_index += 1
  1531.     local.turret_death_index ifequal 3 goto turrets_dead
  1532.     local.turret_death_index ifequal 1 thread dialog::pilot_nice_shooting
  1533.     local.turret_death_index ifequal 2 thread dialog::jc_way_to_hit
  1534.     goto turret_death_loop
  1535.  
  1536. turrets_dead:
  1537.     level.turretsdead = 5
  1538.     level.PObjective1 = 1
  1539.     thread MissionComputer
  1540.     thread global/universal_script.scr::PObjectiveComplete
  1541.     level.complete += 1
  1542.      end
  1543.  
  1544. //==========================================
  1545. // Spawn People in to turrets
  1546. //==========================================
  1547. // Removed window guys Spawn code 9/29
  1548. //==========================================
  1549. spawn_guy_at_turret1:        // Thug1 dude
  1550.     trigger $spawner1
  1551.     level.count_bad_guys += 1
  1552.     level.turret1_active = 1
  1553.     wait .1
  1554.     $thug1    thread thug1_setstates
  1555.     wait 2
  1556.     trigger $thug1
  1557.      end
  1558.  
  1559. thug1_setstates:
  1560.     local.self    ignore    runtoarea
  1561.     local.self    ignore    doorsound mutantsound voicesound machinesound radiosound
  1562.     local.self    ignore    weaponsound movementsound painsound deathsound breakingsound
  1563.     local.self    ignore    attackentity use sightenemy
  1564.  
  1565.     local.self    definestate    activate    thug1_activated
  1566.     local.self    definestate    killed    thug1_killed
  1567.     local.self    definestate    idle    thug1_idle
  1568.  
  1569.     local.self    state    idle
  1570.  
  1571.     pause
  1572.  
  1573. thug1_idle:
  1574.     local.self    anim    idle
  1575.     waitFor local.self
  1576.     pause
  1577.     goto thug1_idle
  1578.  
  1579. thug1_activated:
  1580.     $door1    open $thug1
  1581.     local.self      ignore  activate
  1582.     local.self    runto    $turret1_path1
  1583.     waitFor local.self
  1584.     local.self    runto    $turret1_path2
  1585.     waitFor local.self
  1586.     $turret1    activate
  1587.     local.self    anim    manrocket1
  1588.     pause
  1589.      end
  1590.  
  1591. thug1_killed:
  1592.     $turret1    deactivate
  1593.     level.turret1_active = 0
  1594.     level.count_bad_guys -= 1
  1595.      end
  1596.  
  1597. spawn_guy_at_turret2:        // Thug2 dude
  1598.     trigger $spawner2
  1599.     level.count_bad_guys += 1
  1600.     level.turret2_active = 1
  1601.     wait .1
  1602.     $thug2    thread thug2_setstates
  1603.     wait 2
  1604.     trigger $thug2
  1605.      end
  1606.  
  1607. thug2_setstates:
  1608.     local.self    ignore    runtoarea
  1609.     local.self    ignore    doorsound mutantsound voicesound machinesound radiosound
  1610.     local.self    ignore    weaponsound movementsound painsound deathsound breakingsound
  1611.     local.self    ignore    attackentity use sightenemy
  1612.  
  1613.     local.self    definestate    activate    thug2_activated
  1614.     local.self    definestate    killed    thug2_killed
  1615.     local.self    definestate    idle    thug2_idle
  1616.  
  1617.     local.self    state    idle
  1618.  
  1619.     pause
  1620.  
  1621. thug2_idle:
  1622.     local.self    anim    idle
  1623.     waitFor local.self
  1624.     pause
  1625.     goto thug2_idle
  1626.  
  1627. thug2_activated:
  1628.     $door2    open $thug2
  1629.     local.self      ignore  activate
  1630.     local.self    runto    $turret2_path1
  1631.     waitFor local.self
  1632.     local.self    runto    $turret2_path2
  1633.     waitFor local.self
  1634.     $turret2    activate
  1635.     local.self    anim    manrocket1
  1636.     pause
  1637.      end
  1638.  
  1639. thug2_killed:
  1640.     $turret2    deactivate
  1641.     level.turret2_active = 0
  1642.     level.count_bad_guys -= 1
  1643.     //thread spawn_guy_at_turret2
  1644.     end
  1645.  
  1646. spawn_guy_at_turret3:        // Thug3 dude
  1647.     trigger $spawner3
  1648.     level.count_bad_guys += 1
  1649.     level.turret3_active = 1
  1650.     wait .1
  1651.     $thug3    thread thug3_setstates
  1652.     wait 2
  1653.     trigger $thug3
  1654.      end
  1655.  
  1656. thug3_setstates:
  1657.     local.self    ignore    runtoarea
  1658.     local.self    ignore    doorsound mutantsound voicesound machinesound radiosound
  1659.     local.self    ignore    weaponsound movementsound painsound deathsound breakingsound
  1660.     local.self    ignore    attackentity use sightenemy
  1661.  
  1662.     local.self    definestate    activate    thug3_activated
  1663.     local.self    definestate    killed    thug3_killed
  1664.     local.self    definestate    idle    thug3_idle
  1665.  
  1666.     local.self    state    idle
  1667.  
  1668.     pause
  1669.  
  1670. thug3_idle:
  1671.     local.self    anim    idle
  1672.     waitFor local.self
  1673.     pause
  1674.     goto thug3_idle
  1675.  
  1676. thug3_activated:
  1677.     $door3    open $thug3
  1678.     local.self      ignore  activate
  1679.     local.self    runto    $turret3_path1
  1680.     waitFor local.self
  1681.     local.self    runto    $turret3_path2
  1682.     waitFor local.self
  1683.     $turret3    activate
  1684.     local.self    anim    manrocket1
  1685.     pause
  1686.      end
  1687.  
  1688. thug3_killed:
  1689.     $turret3    deactivate
  1690.     level.turret3_active = 0
  1691.     level.count_bad_guys -= 1
  1692.     //thread spawn_guy_at_turret3
  1693.      end
  1694.  
  1695. precache:
  1696.   cachesound "environment/alarm/police/siren2.wav"
  1697.   cachesound "environment/alarm/police/siren2down.wav"
  1698.   cachesound "impact/comp_explode/cmpmx3.wav"
  1699.   cachesound "impact/crates/crate3.wav"
  1700.   cachesound "misc/null.wav"
  1701.   cachesound "vehicle/helicopt/hit1.wav"
  1702.   cachesound "vehicle/helicopt/flyloop.wav"
  1703.   cachesound "vehicle/helicopt/hidown.wav"
  1704.   cachesound "vehicle/atv/strt.wav"
  1705.   cachesound "vehicle/humvee/skid.wav"
  1706. end
  1707.